(レポート) BDT302: Amazon Machine Learningを使ったリアルワールドスマートアプリケーション #reinvent
最近は仕事でAmazon Machine Learningを触っているので、Amazon MLのセッションスライドを読んでみました。
概要
Amazon MLの利用例として、Twitter上で@awscloudにmentionが届いた際にAWSのカスタマーサービス担当者が対応する必要があるかどうかを判断するアプリケーションを作ってみるという内容でした。
利用しているAWSのサービス
利用しているAWSのサービスは以下の通りです。ソースコードもGitHub上に公開されており、実際に試すことが出来そうです。なにより、GitHub上にサンプルの教師データも用意されているので、Amazon Mechanical Turk!を使った教師データの作成についてはスキップ可能となっています(Mechanical Turkを触ったことがないので安心しました)。
モデルの作成
カスタマーサービスがアクションを起こすかどうかを判定するモデルを作ります。そのため、Amazon MLで利用するモデルは二項分類(Yes/No)になります。判定に利用する説明変数はtweetのテキスト本文とメタデータになります。
機械学習ではまず教師データを使ってモデルを作成します。そのため、Twitter APIを使って学習用のデータを取得します。次に、このデータに対して正解データとしてアクションを起こす/起こさないのラベルをつけるためMechanical Turkでタスクを作成します。
学習データができたので、このデータを使ったAmazon MLで二項分類のモデルを作成します。
アプリケーションの作成
最終的に@awscloudに対するtweetを読み込んで1件ずつカスタマーサービスが反応すべきか判定し、対応すると判定した場合はSNSに通知するアプリケーションを作成します。
まず、Lambdaから予測APIを呼び出せるようにするためAmazon MLのRealtime Endpointを作成します。次にLambdaを呼び出すためのKinesis streamを作成します。最後にLambda Functionを作成します。
最後に@awscloudのtweetを読み込んでKinesisにputするスクリプトを作成して完成です。このスクリプトを実行すると@awscloudの直近のtweetをKinesisにputするので、実際に判定可能か試すことが出来ます。
まとめ
Amazon MLを使ったアプリケーションの作り方についてイメージがわいたのではないでしょうか。Amazon MLの手前にLambdaを置くというのはありがちなパターンだと思います。
個人的にはMechanical Turkで教師データのラベル付をするというのは話としては知っていたんですが、実際にre:Inventのセッションで使ったのは衝撃でしたw